
namespace gen {
 
    template <typename S>
    template <typename InfoT>
	void
	not_first<S>::generate(InfoT & info) const
    {
		if (info.current() != info.domain().firstPositive()) 
		{
			this->subject().generate(info);
		}
    }
    
    ///////////////////////////////////////////////////////////////////////////
    //
    //  first class implementation
    //
    ///////////////////////////////////////////////////////////////////////////
    template <typename S>
    inline not_first<S> 
	operator~(first<S> const& a)
    {
		// get sub generator, cast to S
        return not_first<S>(a.subject().derived());
    }

}
